package com.zz.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.io.Serializable;

/**
 * 消息类型
 */
@AllArgsConstructor
@Getter
public enum MessageType implements Serializable {

    /**
     * 错误类型
     */
    EMPTY_TYPE((byte) 0x00),
    /**
     * 认证消息
     */
    C_TYPE_AUTH((byte) 0x01),

    /**
     * 保活确认消息
     */
    TYPE_ACK((byte) 0x02),

    /**
     * 代理后端服务器建立连接消息
     */
    TYPE_CONNECT((byte) 0x03),

    /**
     * 代理后端服务器断开连接消息
     */
    TYPE_DISCONNECT((byte) 0x04),

    /**
     * 代理数据传输
     */
    TYPE_TRANSFER((byte) 0x05),

    /**
     * 用户与代理服务器以及代理客户端与真实服务器连接是否可写状态同步
     */
    C_TYPE_WRITE_CONTROL((byte) 0x06),

    /**
     * 心跳消息
     */
    TYPE_HEARTBEAT((byte) 0x07),

    /**
     * 连接失败
     */
    CONNECT_FAIR((byte) 0x09),


    ;

    private final byte mark;

    public static boolean markTypeVerify(byte markType) {
        for (MessageType value : values()) {
            if (value.mark == markType) {
                return true;
            }
        }
        return false;
    }

    public static MessageType getMessageType(byte type) {
        for (MessageType value : values()) {
            if (value.getMark() == type) {
                return value;
            }
        }
        return EMPTY_TYPE;
    }
}
